﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LogAnProjectUsingStubs
{
    public class LogAnalyzer
    {
        private IExtensionManager manager;

        public LogAnalyzer()
        {
            manager = new FileExtensionManager();
        }
        //Testden cagirabilmesi icin constructuor injection yapiliyor. Stub buraya verilecek
        public LogAnalyzer(IExtensionManager mgr)
        {
            manager = mgr;
        }
        //classin metodu bu mainden cagirilacak calisacak olan metod. mainde once bu LogAnalyzer nesnesi olusturulacak o oandada FileExtensionManager olusacak burda kod bu sinifa bagimli ve kontrol metodu icin gene FileExtensionManagerin metodu kullanilacak. Sonucta Test edilecek kodda FileExtensionManager adinda kodun bagimli oldugu bir nesne var! Bunu normalde test edemezdik ancak yaptigimiz IExtensionManager adinda bir interfaceden turetmek bu interfaceden tureyen bir Stub olusturarak kod test edilirken bu stub nesnesi koda verilecek ve biz testi FileExtensionManagerden degilde bizim stub sinifimiz uzerinden yaparak bagimliligin onun gececez, aslinda yaptigimiz FileExtensionunun simula etmek, fake olusturmak.. bunun icinde yani kodunda test edilebilir olmasi icinde FileExtensionManageri ve Stubi ortak bir interfaceden turettik! dolayisiyla program calisirken herhangi bir isleyisinden sapma soz konusu olmayacak hale getirdik.
        public bool GecerliDosyaAdimi(string dosyaadi)
        {
            return manager.IsValid(dosyaadi);
        }
    }
    public class FileExtensionManager : IExtensionManager
    {
        public bool IsValid(string fileName)
        {
            throw new NotImplementedException();
        }
    }
    public interface IExtensionManager
    {
        bool IsValid(string fileName);
    }
   
}
